package com.seguriapp.util;

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;

/**
 * 
 * TODO(pjohnson): Clase utilitaria que determinara la ubicacion fisica del
 * device.
 * 
 * @author Pablo Johnson
 */
public class GPS implements LocationListener {

	private boolean isGpsEnabled;
	private LocationManager locationMgr;

	@Override
	public void onLocationChanged(Location location) {
		// TODO: Dejado vacio intencionalmente
	}

	@Override
	public void onProviderDisabled(String provider) {
		// TODO: Dejado vacio intencionalmente
	}

	@Override
	public void onProviderEnabled(String provider) {
		// TODO: Dejado vacio intencionalmente
	}

	@Override
	public void onStatusChanged(String provider, int status, Bundle extras) {
		// TODO: Dejado vacio intencionalmente
	}

	/**
	 * Metodo que detecta la ubicacion actual
	 * 
	 * @param context
	 *            Contexto de la aplicacion
	 * @return Un objeto Location conteniendo la ubicacion actual
	 */
	public Location getCurFix(final Context context) {

		Criteria c = new Criteria();
		c.setAccuracy(Criteria.ACCURACY_FINE);
		locationMgr = (LocationManager) context
				.getSystemService(Context.LOCATION_SERVICE);
		locationMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
				10000, 10, this);

		String bestP = locationMgr.getBestProvider(c, true);
		isGpsEnabled = locationMgr.isProviderEnabled(bestP);

		Location curFix = null;
		try {
			Location gps = locationMgr
					.getLastKnownLocation(LocationManager.GPS_PROVIDER);
			Location network = locationMgr
					.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

			if (network != null) {
				curFix = network;
			} else if (gps != null) {
				curFix = gps;
			}
		} catch (Exception ex2) {
			Log.d("Error", ex2.getMessage());
		}
		return curFix;
	}

	/**
	 * 
	 * @return Booleano indicando si el gps esta habilitado
	 */
	public boolean isGpsEnabled() {
		return isGpsEnabled;
	}

	/**
	 * Remueve las actualizaciones gps
	 */
	public void removeUpdates(final LocationListener listener) {
		locationMgr.removeUpdates(listener);
	}

}
